{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# GAN图像生成"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型简介\n",
    "\n",
    "生成式对抗网络(Generative Adversarial Networks，GAN)是一种生成式机器学习模型，是近年来复杂分布上无监督学习最具前景的方法之一。\n",
    "\n",
    "最初，GAN由Ian J. Goodfellow于2014年发明，并在论文[Generative Adversarial Nets](https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf)中首次进行了描述，其主要由两个不同的模型共同组成——生成器(Generative Model)和判别器(Discriminative Model)：\n",
    "\n",
    "- 生成器的任务是生成看起来像训练图像的“假”图像；\n",
    "- 判别器需要判断从生成器输出的图像是真实的训练图像还是虚假的图像。\n",
    "\n",
    "GAN通过设计生成模型和判别模型这两个模块，使其互相博弈学习产生了相当好的输出。\n",
    "\n",
    "GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。在这个框架中，将会同时训练两个模型——捕捉数据分布的生成模型 $G$ 和估计样本是否来自训练数据的判别模型 $D$ 。\n",
    "\n",
    "在训练过程中，生成器会不断尝试通过生成更好的假图像来骗过判别器，而判别器在这过程中也会逐步提升判别能力。这种博弈的平衡点是，当生成器生成的假图像和训练数据图像的分布完全一致时，判别器拥有50%的真假判断置信度。\n",
    "\n",
    "用 $x$ 代表图像数据，用 $D(x)$表示判别器网络给出图像判定为真实图像的概率。在判别过程中，$D(x)$ 需要处理作为二进制文件的大小为 $1\\times 28\\times 28$ 的图像数据。当 $x$ 来自训练数据时，$D(x)$ 数值应该趋近于 $1$ ；而当 $x$ 来自生成器时，$D(x)$ 数值应该趋近于 $0$ 。因此 $D(x)$ 也可以被认为是传统的二分类器。\n",
    "\n",
    "用 $z$ 代表标准正态分布中提取出的隐码(隐向量)，用 $G(z)$：表示将隐码(隐向量) $z$ 映射到数据空间的生成器函数。函数 $G(z)$ 的目标是将服从高斯分布的随机噪声 $z$ 通过生成网络变换为近似于真实分布 $p_{data}(x)$ 的数据分布，我们希望找到 $θ$ 使得 $p_{G}(x;\\theta)$ 和 $p_{data}(x)$ 尽可能的接近，其中 $\\theta$ 代表网络参数。\n",
    "\n",
    "$D(G(z))$ 表示生成器 $G$ 生成的假图像被判定为真实图像的概率，如[Generative Adversarial Nets](https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf)中所述，$D$ 和 $G$ 在进行一场博弈，$D$ 想要最大程度的正确分类真图像与假图像，也就是参数 $\\log D(x)$；而 $G$ 试图欺骗 $D$ 来最小化假图像被识别到的概率，也就是参数 $\\log(1−D(G(z)))$。因此GAN的损失函数为：\n",
    "\n",
    "$$\n",
    "\\min\\limits_{G}\\max\\limits_{D} V(D,G)=E_{x\\sim p_{data}\\;\\,(x)}[\\log D(x)]+E_{z\\sim p_{z}\\,(z)}[\\log (1-D(G(z)))]\n",
    "$$\n",
    "\n",
    "从理论上讲，此博弈游戏的平衡点是$p_{G}(x;\\theta) = p_{data}(x)$，此时判别器会随机猜测输入是真图像还是假图像。下面我们简要说明生成器和判别器的博弈过程：\n",
    "\n",
    "1. 在训练刚开始的时候，生成器和判别器的质量都比较差，生成器会随机生成一个数据分布。\n",
    "2. 判别器通过求取梯度和损失函数对网络进行优化，将靠近真实数据分布的数据判定为1，将靠近生成器生成出来数据分布的数据判定为0。\n",
    "3. 生成器通过优化，生成出更加贴近真实数据分布的数据。\n",
    "4. 生成器所生成的数据和真实数据达到相同的分布，此时判别器的输出为1/2。\n",
    "\n",
    "![gan](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r2.2/tutorials/application/source_zh_cn/cv/images/gan_image.png)\n",
    "\n",
    "在上图中，蓝色虚线表示判别器，黑色虚线表示真实数据分布，绿色实线表示生成器生成的虚假数据分布，$z$ 表示隐码，$x$ 表示生成的虚假图像 $G(z)$。该图片来源于[Generative Adversarial Nets](https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf)。详细的训练方法介绍见原论文。\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 环境准备\n",
    "\n",
    "开发者拿到香橙派开发板后，首先需要进行硬件资源确认，镜像烧录及CANN和MindSpore版本的升级，才可运行该案例，具体如下：\n",
    "\n",
    "- 硬件： 香橙派AIpro 16G 8-12T开发板\n",
    "- 镜像： 香橙派官网ubuntu镜像\n",
    "- CANN：8.0.RC3.alpha002\n",
    "- MindSpore： 2.4.10\n",
    "\n",
    "### 镜像烧录\n",
    "\n",
    "运行该案例需要烧录香橙派官网ubuntu镜像，烧录流程参考[昇思MindSpore官网--香橙派开发专区--环境搭建指南--镜像烧录](https://www.mindspore.cn/docs/zh-CN/r2.4.10/orange_pi/environment_setup.html#1-%E9%95%9C%E5%83%8F%E7%83%A7%E5%BD%95%E4%BB%A5windows%E7%B3%BB%E7%BB%9F%E4%B8%BA%E4%BE%8B)章节。\n",
    "\n",
    "### CANN升级\n",
    "\n",
    "CANN升级参考[昇思MindSpore官网--香橙派开发专区--环境搭建指南--CANN升级](https://www.mindspore.cn/docs/zh-CN/r2.4.10/orange_pi/environment_setup.html#3-cann%E5%8D%87%E7%BA%A7)章节。\n",
    "\n",
    "### MindSpore升级\n",
    "\n",
    "MindSpore升级参考[昇思MindSpore官网--香橙派开发专区--环境搭建指南--MindSpore升级](https://www.mindspore.cn/docs/zh-CN/r2.4.10/orange_pi/environment_setup.html#4-mindspore%E5%8D%87%E7%BA%A7)章节。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 设置运行环境\n",
    "\n",
    "由于资源限制，需开启性能优化模式，具体设置如下参数：\n",
    "\n",
    " max_device_memory=\"2GB\" : 设置设备可用的最大内存为2GB。\n",
    "\n",
    " mode=mindspore.GRAPH_MODE : 表示在GRAPH_MODE模式中运行。\n",
    "\n",
    " device_target=\"Ascend\" : 表示待运行的目标设备为Ascend。\n",
    "\n",
    " jit_config={\"jit_level\":\"O2\"} : 编译优化级别开启极致性能优化，使用下沉的执行方式。\n",
    "\n",
    " ascend_config={\"precision_mode\":\"allow_mix_precision\"} : 自动混合精度，自动将部分算子的精度降低到float16或bfloat16。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/HwHiAiUser/.conda/envs/mindspore_py39/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.\n",
      "  setattr(self, word, getattr(machar, word).flat[0])\n",
      "/home/HwHiAiUser/.conda/envs/mindspore_py39/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.\n",
      "  return self._float_to_str(self.smallest_subnormal)\n",
      "/home/HwHiAiUser/.conda/envs/mindspore_py39/lib/python3.9/site-packages/numpy/core/getlimits.py:549: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.\n",
      "  setattr(self, word, getattr(machar, word).flat[0])\n",
      "/home/HwHiAiUser/.conda/envs/mindspore_py39/lib/python3.9/site-packages/numpy/core/getlimits.py:89: UserWarning: The value of the smallest subnormal for <class 'numpy.float32'> type is zero.\n",
      "  return self._float_to_str(self.smallest_subnormal)\n"
     ]
    }
   ],
   "source": [
    "import mindspore\n",
    "mindspore.set_context(max_device_memory=\"2GB\", mode=mindspore.GRAPH_MODE, device_target=\"Ascend\",  jit_config={\"jit_level\":\"O2\"}, ascend_config={\"precision_mode\":\"allow_mix_precision\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据集准备与处理\n",
    "\n",
    "### 数据集简介\n",
    "\n",
    "[MNIST手写数字数据集](http://yann.lecun.com/exdb/mnist/)是NIST数据集的子集，共有70000张手写数字图片，包含60000张训练样本和10000张测试样本，数字图片为二进制文件，图片大小为28\\*28，单通道。图片已经预先进行了尺寸归一化和中心化处理。\n",
    "\n",
    "本案例将使用MNIST手写数字数据集来训练一个生成式对抗网络，使用该网络模拟生成手写数字图片。\n",
    "\n",
    "### 数据集下载\n",
    "\n",
    "使用`download`接口下载数据集，并将下载后的数据集自动解压到当前目录下。数据下载之前需要使用`pip install download`安装`download`包。\n",
    "\n",
    "下载解压后的数据集目录结构如下：\n",
    "\n",
    "```text\n",
    "./MNIST_Data/\n",
    "├─ train\n",
    "│ ├─ train-images-idx3-ubyte\n",
    "│ └─ train-labels-idx1-ubyte\n",
    "└─ test\n",
    "   ├─ t10k-images-idx3-ubyte\n",
    "   └─ t10k-labels-idx1-ubyte\n",
    "```\n",
    "\n",
    "数据下载的代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#install download\n",
    "\n",
    "!pip install download"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-02-09T09:45:06.383718Z",
     "start_time": "2023-02-09T09:44:40.500860Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading data from https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip (10.3 MB)\n",
      "\n",
      "file_sizes: 100%|██████████████████████████| 10.8M/10.8M [00:02<00:00, 4.89MB/s]\n",
      "Extracting zip file...\n",
      "Successfully downloaded / unzipped to .\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'.'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据下载\n",
    "from download import download\n",
    "\n",
    "url = \"https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip\"\n",
    "download(url, \".\", kind=\"zip\", replace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据加载\n",
    "\n",
    "使用MindSpore自己的`MnistDatase`接口，读取和解析MNIST数据集的源文件构建数据集。然后对数据进行一些前处理，包含数据转换、数据增强、批量处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-02-09T09:45:20.017779Z",
     "start_time": "2023-02-09T09:45:06.385713Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iter size: 468\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import mindspore.dataset as ds\n",
    "\n",
    "batch_size = 128\n",
    "latent_size = 100  # 隐码的长度\n",
    "\n",
    "train_dataset = ds.MnistDataset(dataset_dir='./MNIST_Data/train')\n",
    "test_dataset = ds.MnistDataset(dataset_dir='./MNIST_Data/test')\n",
    "\n",
    "def data_load(dataset):\n",
    "    dataset1 = ds.GeneratorDataset(dataset, [\"image\", \"label\"], shuffle=True, python_multiprocessing=False)\n",
    "    # 数据增强\n",
    "    mnist_ds = dataset1.map(\n",
    "        operations=lambda x: (x.astype(\"float32\"), np.random.normal(size=latent_size).astype(\"float32\")),\n",
    "        output_columns=[\"image\", \"latent_code\"])\n",
    "    mnist_ds = mnist_ds.project([\"image\", \"latent_code\"])\n",
    "\n",
    "    # 批量操作\n",
    "    mnist_ds = mnist_ds.batch(batch_size, True)\n",
    "\n",
    "    return mnist_ds\n",
    "\n",
    "mnist_ds = data_load(train_dataset)\n",
    "\n",
    "iter_size = mnist_ds.get_dataset_size()\n",
    "print('Iter size: %d' % iter_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据集可视化\n",
    "\n",
    "通过`create_dict_iterator`函数将数据转换成字典迭代器，然后使用`matplotlib`模块可视化部分训练数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-02-09T09:45:21.094899Z",
     "start_time": "2023-02-09T09:45:20.018778Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 300x300 with 25 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "data_iter = next(mnist_ds.create_dict_iterator(output_numpy=True))\n",
    "figure = plt.figure(figsize=(3, 3))\n",
    "cols, rows = 5, 5\n",
    "for idx in range(1, cols * rows + 1):\n",
    "    image = data_iter['image'][idx]\n",
    "    figure.add_subplot(rows, cols, idx)\n",
    "    plt.axis(\"off\")\n",
    "    plt.imshow(image.squeeze(), cmap=\"gray\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型构建\n",
    "\n",
    "本案例实现中所搭建的 GAN 模型结构与原论文中提出的 GAN 结构大致相同，但由于所用数据集 MNIST 为单通道小尺寸图片，可识别参数少，便于训练，我们在判别器和生成器中采用全连接网络架构和 `ReLU` 激活函数即可达到令人满意的效果，且省略了原论文中用于减少参数的 `Dropout` 策略和可学习激活函数 `Maxout`。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 生成器\n",
    "\n",
    "生成器 `Generator` 的功能是将隐码映射到数据空间。由于数据是图像，这一过程也会创建与真实图像大小相同的灰度图像(或 RGB 彩色图像)。在本案例演示中，该功能通过五层 `Dense` 全连接层来完成的，每层都与 `BatchNorm1d` 批归一化层和 `ReLU` 激活层配对，输出数据会经过 `Tanh` 函数，使其返回 [-1,1] 的数据范围内。注意实例化生成器之后需要修改参数的名称，不然静态图模式下会报错。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-02-09T09:45:21.190676Z",
     "start_time": "2023-02-09T09:45:21.153742Z"
    }
   },
   "outputs": [],
   "source": [
    "from mindspore import nn\n",
    "import mindspore.ops as ops\n",
    "\n",
    "\n",
    "img_size = 28  # 训练图像长（宽）\n",
    "\n",
    "class Generator(nn.Cell):\n",
    "    def __init__(self, latent_size, auto_prefix=True):\n",
    "        super(Generator, self).__init__(auto_prefix=auto_prefix)\n",
    "        self.model = nn.SequentialCell()\n",
    "        # [N, 100] -> [N, 128]\n",
    "        # 输入一个100维的0～1之间的高斯分布，然后通过第一层线性变换将其映射到256维\n",
    "        self.model.append(nn.Dense(latent_size, 128))\n",
    "        self.model.append(nn.ReLU())\n",
    "        # [N, 128] -> [N, 256]\n",
    "        self.model.append(nn.Dense(128, 256))\n",
    "        self.model.append(nn.BatchNorm1d(256))\n",
    "        self.model.append(nn.ReLU())\n",
    "        # [N, 256] -> [N, 512]\n",
    "        self.model.append(nn.Dense(256, 512))\n",
    "        self.model.append(nn.BatchNorm1d(512))\n",
    "        self.model.append(nn.ReLU())\n",
    "        # [N, 512] -> [N, 1024]\n",
    "        self.model.append(nn.Dense(512, 1024))\n",
    "        self.model.append(nn.BatchNorm1d(1024))\n",
    "        self.model.append(nn.ReLU())\n",
    "        # [N, 1024] -> [N, 784]\n",
    "        # 经过线性变换将其变成784维\n",
    "        self.model.append(nn.Dense(1024, img_size * img_size))\n",
    "        # 经过Tanh激活函数是希望生成的假的图片数据分布能够在-1～1之间\n",
    "        self.model.append(nn.Tanh())\n",
    "\n",
    "    def construct(self, x):\n",
    "        img = self.model(x)\n",
    "        return ops.reshape(img, (-1, 1, 28, 28))\n",
    "\n",
    "net_g = Generator(latent_size)\n",
    "net_g.update_parameters_name('generator')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 判别器\n",
    "\n",
    "如前所述，判别器 `Discriminator` 是一个二分类网络模型，输出判定该图像为真实图的概率。主要通过一系列的 `Dense` 层和 `LeakyReLU` 层对其进行处理，最后通过 `Sigmoid` 激活函数，使其返回 [0, 1] 的数据范围内，得到最终概率。注意实例化判别器之后需要修改参数的名称，不然静态图模式下会报错。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-02-09T09:45:21.207645Z",
     "start_time": "2023-02-09T09:45:21.191642Z"
    }
   },
   "outputs": [],
   "source": [
    " # 判别器\n",
    "class Discriminator(nn.Cell):\n",
    "    def __init__(self, auto_prefix=True):\n",
    "        super().__init__(auto_prefix=auto_prefix)\n",
    "        self.model = nn.SequentialCell()\n",
    "        # [N, 784] -> [N, 512]\n",
    "        self.model.append(nn.Dense(img_size * img_size, 512))  # 输入特征数为784，输出为512\n",
    "        self.model.append(nn.LeakyReLU())  # 默认斜率为0.2的非线性映射激活函数\n",
    "        # [N, 512] -> [N, 256]\n",
    "        self.model.append(nn.Dense(512, 256))  # 进行一个线性映射\n",
    "        self.model.append(nn.LeakyReLU())\n",
    "        # [N, 256] -> [N, 1]\n",
    "        self.model.append(nn.Dense(256, 1))\n",
    "        self.model.append(nn.Sigmoid())  # 二分类激活函数，将实数映射到[0,1]\n",
    "\n",
    "    def construct(self, x):\n",
    "        x_flat = ops.reshape(x, (-1, img_size * img_size))\n",
    "        return self.model(x_flat)\n",
    "\n",
    "net_d = Discriminator()\n",
    "net_d.update_parameters_name('discriminator')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 权重加载\n",
    "\n",
    "下面我们下载已有的生成器网络模型参数文件加载到生成器网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import mindspore as ms\n",
    "\n",
    "# 下载权重\n",
    "gan_url = \"https://modelers.cn/coderepo/web/v1/file/MindSpore-Lab/cluoud_obs/main/media/examples/mindspore-courses/orange-pi-online-infer/09-GAN/Generator199.ckpt\"\n",
    "path = \"./Generator199.ckpt\"\n",
    "\n",
    "ckpt_path = download(gan_url, path, replace=True)\n",
    "parameter = ms.load_checkpoint(ckpt_path)\n",
    "ms.load_param_into_net(net_g, parameter)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型推理\n",
    "\n",
    "下面我们通过加载生成器网络模型参数文件来生成图像，代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-02-09T13:36:54.707633Z",
     "start_time": "2023-02-09T13:36:54.053382Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[WARNING] CORE(7168,e7ffeb0eb020,python3.9):2025-01-20-14:56:10.062.325 [mindspore/core/utils/file_utils.cc:253] GetRealPath] Get realpath failed, path[/tmp/ipykernel_7168/3799052259.py]\n",
      "[WARNING] CORE(7168,e7ffeb0eb020,python3.9):2025-01-20-14:56:10.062.413 [mindspore/core/utils/info.cc:121] ToString] The file '/tmp/ipykernel_7168/3799052259.py' may not exists.\n",
      "Generating images: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 25/25 [00:01<00:00, 24.64it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 360x360 with 25 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from tqdm import tqdm\n",
    "from mindspore import Tensor\n",
    "\n",
    "# 模型生成结果\n",
    "test_data = Tensor(np.random.normal(0, 1, (25, 100)).astype(np.float32))\n",
    "images = net_g(test_data).transpose(0, 2, 3, 1).asnumpy()\n",
    "# 结果展示\n",
    "fig = plt.figure(figsize=(3, 3), dpi=120)\n",
    "for i in tqdm(range(25), desc=\"Generating images\"):\n",
    "    fig.add_subplot(5, 5, i + 1)\n",
    "    plt.axis(\"off\")\n",
    "    plt.imshow(images[i].squeeze(), cmap=\"gray\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本案例已同步上线 [GitHub 仓](https://github.com/mindspore-courses/orange-pi-mindspore/tree/master/Online/09-GAN)，更多案例开发亦可参考该仓库。\n",
    "\n",
    "本案例运行所需环境：\n",
    "\n",
    "- **硬件**：香橙派 AIpro 16G 8-12T 开发板\n",
    "- **镜像**：香橙派官网 Ubuntu 镜像\n",
    "- **CANN**：8.0.RC3.alpha002\n",
    "- **MindSpore**：2.4.10"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
